/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.gar.beans;

import edu.upn.sigemfi.gar.bc.AgricolaDelegate;
import edu.upn.sigemfi.gar.bc.EstadoGarantiaDelegate;
import edu.upn.sigemfi.gar.bc.GarantiaDelegate;
import edu.upn.sigemfi.gar.bc.SeguroDelegate;
import edu.upn.sigemfi.gar.bc.VehiculoDelegate;
import edu.upn.sigemfi.gar.be.Agricola;
import edu.upn.sigemfi.gar.be.Aval;
import edu.upn.sigemfi.gar.be.Calendario;
import edu.upn.sigemfi.gar.be.EstadoGarantia;
import edu.upn.sigemfi.gar.be.Garantia;
import edu.upn.sigemfi.gar.be.GarantiaHipotecaria;
import edu.upn.sigemfi.gar.be.GarantiaLiquida;
import edu.upn.sigemfi.gar.be.GarantiaPignoraticia;
import edu.upn.sigemfi.gar.be.GarantiaPrendaria;
import edu.upn.sigemfi.gar.be.GarantiaWarrant;
import edu.upn.sigemfi.gar.be.Seguro;
import edu.upn.sigemfi.gar.be.Vehiculo;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author Programador
 */
public class GarantiaController extends AbstractController{

    private GarantiaDelegate delegado;
    private VehiculoDelegate delegadoVehiculo;
    private AgricolaDelegate delegadoAgricola;
    private EstadoGarantiaDelegate delegadoEstadoGarantia;
    private SeguroDelegate delegadoSeguro;
    private GarantiaPrendaria garantiaPrendaria;
    private GarantiaPignoraticia garantiaPignoraticia;
    private GarantiaLiquida garantiaLiquida;
    private GarantiaHipotecaria garantiaHipotecaria;
    private GarantiaWarrant garantiaWarrant;
    private Aval aval;
    private Agricola agricola;
    private Vehiculo vehiculo;
    private Seguro seguro;
    private EstadoGarantia estadoGarantia;
    private Calendario calendario;
    private String criterioPrendarioNombre;
    private String criterioPrendarioDNI;
    private String verPorPrendario="Nombre";
    private String criterioHipotecario;
    private String tipoPrendaActualizar;

    public GarantiaController()
    {
        delegado = new GarantiaDelegate();
        delegadoVehiculo = new VehiculoDelegate();
        delegadoAgricola = new AgricolaDelegate();
        delegadoEstadoGarantia = new EstadoGarantiaDelegate();
        delegadoSeguro = new SeguroDelegate();
        calendario = new Calendario();
    }

    public List<Garantia> getGarantias() throws Exception{
        try{
             List<Garantia> lista = delegado.listarTodas();
             for (Garantia c : lista)
             {
                 c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
             }
             return lista;
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public Seguro getSeguro() {
        return seguro;
    }

    public void setSeguro(Seguro seguro) {
        this.seguro = seguro;
    }

    public String getVerPorPrendario() {
        return verPorPrendario;
    }

    public void setVerPorPrendario(String verPorPrendario) {
        this.verPorPrendario = verPorPrendario;
    }

    public boolean isVerPorGarPrendaria(){
        if(verPorPrendario.equals("Nombre")==true)
           return true;
        else
           return false;
    }

    public GarantiaLiquida getGarantiaLiquida() {
        return garantiaLiquida;
    }

    public void setGarantiaLiquida(GarantiaLiquida garantiaLiquida) {
        this.garantiaLiquida = garantiaLiquida;
    }

    public GarantiaPignoraticia getGarantiaPignoraticia() {
        return garantiaPignoraticia;
    }

    public void setGarantiaPignoraticia(GarantiaPignoraticia garantiaPignoraticia) {
        this.garantiaPignoraticia = garantiaPignoraticia;
    }

    public GarantiaWarrant getGarantiaWarrant() {
        return garantiaWarrant;
    }

    public void setGarantiaWarrant(GarantiaWarrant garantiaWarrant) {
        this.garantiaWarrant = garantiaWarrant;
    }

    public String getTipoPrendaActualizar() {
        return tipoPrendaActualizar;
    }

    public void setTipoPrendaActualizar(String tipoPrendaActualizar) {
        this.tipoPrendaActualizar = tipoPrendaActualizar;
    }

    public GarantiaHipotecaria getGarantiaHipotecaria() {
        return garantiaHipotecaria;
    }

    public void setGarantiaHipotecaria(GarantiaHipotecaria garantiaHipotecaria) {
        this.garantiaHipotecaria = garantiaHipotecaria;
    }

    public Agricola getAgricola() {
        return agricola;
    }

    public void setAgricola(Agricola agricola) {
        this.agricola = agricola;
    }

    public Vehiculo getVehiculo() {
        return vehiculo;
    }

    public void setVehiculo(Vehiculo vehiculo) {
        this.vehiculo = vehiculo;
    }

    public String getCriterioHipotecario() {
        return criterioHipotecario;
    }

    public void setCriterioHipotecario(String criterioHipotecario) {
        this.criterioHipotecario = criterioHipotecario;
    }

    public String getCriterioPrendarioNombre() {
        return criterioPrendarioNombre;
    }

    public void setCriterioPrendarioNombre(String criterioPrendarioNombre) {
        this.criterioPrendarioNombre = criterioPrendarioNombre;
    }

    public String getCriterioPrendarioDNI() {
        return criterioPrendarioDNI;
    }

    public void setCriterioPrendarioDNI(String criterioPrendarioDNI) {
        this.criterioPrendarioDNI = criterioPrendarioDNI;
    }

    public Aval getAval() {
        return aval;
    }

    public void setAval(Aval aval) {
        this.aval = aval;
    }

    public String mostrarPrendaria()
    {
        try{
        if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte")==true)
        {
            vehiculo = delegadoVehiculo.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
            agricola = new Agricola();
        }
        else
        {
            agricola = delegadoAgricola.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
            vehiculo = new Vehiculo();
        }
        }catch (Exception ex)
        {}
        return "mostrar";
    }

    public String mostrar()
    {
        return "mostrar";
    }

    public String editar()
    {
        return "editar";
    }

    public String editarPrendaria()
    {
        try{
        if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte")==true)
        {
            vehiculo = delegadoVehiculo.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
            agricola = new Agricola();
        }
        else
        {
            agricola = delegadoAgricola.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
            vehiculo = new Vehiculo();
        }
        }catch (Exception ex)
        {}
        setTipoPrendaActualizar(garantiaPrendaria.getTipoprenda());
        return "editar";
    }

    public GarantiaPrendaria getGarantiaPrendaria() {
        return garantiaPrendaria;
    }

    public void setGarantiaPrendaria(GarantiaPrendaria garantiaPrendaria) {
        this.garantiaPrendaria = garantiaPrendaria;
    }
    
    // Garantias Prendarias
    public List<GarantiaPrendaria> getGarantiasPrendarias() throws Exception{
        try{
            if (verPorPrendario.equals("Nombre"))
                if(criterioPrendarioNombre == null || criterioPrendarioNombre.isEmpty() )
                {
                    List<GarantiaPrendaria> l = delegado.listarPrendarias();
                    for (GarantiaPrendaria c : l)
                    {
                         c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                    }
                    return l;
                }
                else
                {
                    List<GarantiaPrendaria> l = delegado.listarPrendariasPorCliente(criterioPrendarioNombre);
                    for (GarantiaPrendaria c : l)
                    {
                         c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                    }
                    return l;
                }
            else
            {
                if(criterioPrendarioDNI == null || criterioPrendarioDNI.isEmpty() )
                {
                    List<GarantiaPrendaria> l = delegado.listarPrendarias();
                    for (GarantiaPrendaria c : l)
                    {
                         c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                    }
                    return l;
                }
                else
                {
                    List<GarantiaPrendaria> l = delegado.listarPrendariasPorDNI(criterioPrendarioDNI);
                    for (GarantiaPrendaria c : l)
                    {
                         c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                    }
                    return l;
                }
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String nuevaGarantiaPrendaria() {
        garantiaPrendaria = new GarantiaPrendaria();
        vehiculo = new Vehiculo();
        agricola = new Agricola();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(calendario.getFechaHoy());
        return "nuevo";
    }

    public String registrarGarPrendaria() {
        try {
            delegado.crearGarantiaPrendaria(garantiaPrendaria);
            estadoGarantia.setFidGarGarantia(garantiaPrendaria);
            delegadoEstadoGarantia.crear(estadoGarantia);
            vehiculo.setGarantiaPrendaria(garantiaPrendaria);
            agricola.setGarantiaPrendaria(garantiaPrendaria);
            if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte"))
            { 
                delegadoVehiculo.crear(vehiculo);
                info("La Garantia Prendaria se registro correctamente");
            }
            else
            {
                delegadoAgricola.crear(agricola);
                info("La Garantia Prendaria se registro correctamente");
            }
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "registrar";
    }

    public String actualizarGarPrendaria() {
        try {
            if(getTipoPrendaActualizar().equals("Medio de Transporte"))
            {
                vehiculo = delegadoVehiculo.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
                delegadoVehiculo.eliminar(vehiculo);
            }
            else
            {
                agricola = delegadoAgricola.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
                delegadoAgricola.eliminar(agricola);
            }
            if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte"))
            { 
                vehiculo.setGarantiaPrendaria(garantiaPrendaria);
                delegadoVehiculo.crear(vehiculo);
            }
            else
            {
                agricola.setGarantiaPrendaria(garantiaPrendaria);
                delegadoAgricola.crear(agricola);
            }
            delegado.editarGarantiaPrendaria(garantiaPrendaria);
            info("La Garantia Prendaria se actualizo correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String eliminarGarPrendaria() {
        try {
            estadoGarantia = delegadoEstadoGarantia.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
            delegadoEstadoGarantia.eliminar(estadoGarantia);
            if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte")==true)
            {
                vehiculo = delegadoVehiculo.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
                delegadoVehiculo.eliminar(vehiculo);
            }
            else
            {
                agricola = delegadoAgricola.buscarPorIdGar(garantiaPrendaria.getIdGarantia());
                delegadoAgricola.eliminar(agricola);
            }
            delegado.eliminarGarantiaPrendaria(garantiaPrendaria);
            info("La Garantia Prendaria se elimino correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "";
    }

    public boolean isVerPrendaAuto(){
        if(garantiaPrendaria.getTipoprenda().equals("Medio de Transporte")==true)
           return true;
        else
           return false;
    }

    public boolean isVerPrendaAgricola(){
        if(garantiaPrendaria.getTipoprenda().equals("Agricola")==true)
           return true;
        else
           return false;
    }

    // Avales

    

    public List<Aval> getAvales() throws Exception{
        try{
             List<Aval> lista = delegado.listarAvales();
             for (Aval c : lista)
             {
                 c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
             }
             return lista;
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String nuevoAval() {
        aval = new Aval();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(new Date());
        return "nuevo";
    }

    public String registrarAval() {
        try {
            delegado.crearAval(aval);
            estadoGarantia.setFidGarGarantia(aval);
            delegadoEstadoGarantia.crear(estadoGarantia);
            info("El aval se registro correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String actualizarAval() {
        try {
            delegado.editarAval(aval);
            info("El aval se actualizo correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String eliminarAval() {
        try {
            //estadoGarantia = delegadoEstadoGarantia.buscarPorIdGar(aval.getIdGarantia());
            //delegadoEstadoGarantia.eliminar(estadoGarantia);

            delegado.eliminarAval(aval);
            info("El aval se elimino correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "";
    }
 
    public Aval buscarAval(Long codigo) {
        try {
            return delegado.buscarAval(codigo);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }
    
    // Garantias Hipotecarias
    public List<GarantiaHipotecaria> getGarantiasHipotecarias() throws Exception{
        try{
                List<GarantiaHipotecaria> l = delegado.listarHipotecarias();
                for (GarantiaHipotecaria c : l)
                {
                     c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                }
                return l;
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String eliminarGarHipotecaria() {
        try {
            estadoGarantia = delegadoEstadoGarantia.buscarPorIdGar(garantiaHipotecaria.getIdGarantia());
            delegadoEstadoGarantia.eliminar(estadoGarantia);
            delegado.eliminarGarantiaHipotecaria(garantiaHipotecaria);
            info("La Garantia Hipotecaria se elimino correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "";
    }

    public String nuevaGarantiaHipotecaria() {
        garantiaHipotecaria = new GarantiaHipotecaria();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(calendario.getFechaHoy());
        return "nuevo";
    }

    public String registrarGarHipotecaria() {
        try {
            delegado.crearGarantiaHipotecaria(garantiaHipotecaria);
            estadoGarantia.setFidGarGarantia(garantiaHipotecaria);
            delegadoEstadoGarantia.crear(estadoGarantia);
            info("La Garantia Hipotecaria se registro correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "registrar";
    }

    public String actualizarHipotecaria() {
        try {
            delegado.editarGarantiaHipotecaria(garantiaHipotecaria);
            info("La Garantia Hipotecaria se actualizo correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    //Garantia Liquida
    public String nuevaGarantiaLiquida() {
        garantiaLiquida = new GarantiaLiquida();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(calendario.getFechaHoy());
        return "nuevo";
    }

    public String registrarGarLiquida() {
        try {
            delegado.crearGarantiaLiquida(garantiaLiquida);
            estadoGarantia.setFidGarGarantia(garantiaLiquida);
            delegadoEstadoGarantia.crear(estadoGarantia);
            info("La Garantia Liquida se registro correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "registrar";
    }

    //Garantia Warrant
    public String nuevaGarantiaWarrant() {
        garantiaWarrant = new GarantiaWarrant();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(calendario.getFechaHoy());
        return "nuevo";
    }

    public List<GarantiaWarrant> getGarantiasWarrant() throws Exception{
        try{
                List<GarantiaWarrant> l = delegado.listarWarrant();
                for (GarantiaWarrant c : l)
                {
                     c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                }
                return l;
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String registrarGarWarrant() {
        try {
            delegado.crearGarantiaWarrant(garantiaWarrant);
            estadoGarantia.setFidGarGarantia(garantiaWarrant);
            delegadoEstadoGarantia.crear(estadoGarantia);
            info("La Garantia Warrant se registro correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "registrar";
    }

    public String actualizarGarWarrant() {
        try {
            delegado.editarGarantiaWarrant(garantiaWarrant);
            info("La Garantia Warrant se actualizo correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String eliminarGarWarrant() {
        try {
            delegado.eliminarGarantiaWarrant(garantiaWarrant);
            info("La Garantia Warrant se elimino correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "";
    }
    //Garantia Pignoraticia
    public String nuevaGarantiaPignoraticia() {
        garantiaPignoraticia = new GarantiaPignoraticia();
        estadoGarantia = new EstadoGarantia();
        estadoGarantia.setNombre("Pendiente");
        estadoGarantia.setFechamovimiento(calendario.getFechaHoy());
        seguro = new Seguro();
        return "nuevo";
    }

    public List<GarantiaPignoraticia> getGarantiasPignoraticias() throws Exception{
        try{
                List<GarantiaPignoraticia> l = delegado.listarPignoraticias();
                for (GarantiaPignoraticia c : l)
                {
                     c.setEstadoGarantia(delegadoEstadoGarantia.buscarPorIdGar(c.getIdGarantia()));
                     c.setSeguro(delegadoSeguro.buscarPorIdGar(c.getIdGarantia()));
                }
                return l;
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String eliminarGarPignoraticia() {
        try {
            delegado.eliminarGarantiaPignoraticia(garantiaPignoraticia);
            info("La Garantia Pignoraticia se elimino correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "";
    }

    public String registrarGarPignoraticia() {
        try {
            seguro.setGarantia(garantiaPignoraticia);
            garantiaPignoraticia.setSeguro(seguro);
            estadoGarantia.setFidGarGarantia(garantiaPignoraticia);
            garantiaPignoraticia.setEstadoGarantia(estadoGarantia);
            delegado.crearGarantiaPignoraticia(garantiaPignoraticia);
            info("La Garantia Pignoraticia se registro correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "registrar";
    }

    public String actualizarGarPignoraticia() {
        try {
            seguro.setGarantia(garantiaPignoraticia);
            garantiaPignoraticia.setSeguro(seguro);
            delegado.editarGarantiaPignoraticia(garantiaPignoraticia);
            info("La Garantia Pignoraticia se actualizo correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String mostrarPignoraticia()
    {
        try {
            seguro = delegadoSeguro.buscarPorIdGar(garantiaPignoraticia.getIdGarantia());
        } catch (Exception ex) {
            
        }
        return "mostrar";
    }

    public String editarPignoraticia()
    {
        try {
            seguro = delegadoSeguro.buscarPorIdGar(garantiaPignoraticia.getIdGarantia());
        } catch (Exception ex) {

        }
        return "editar";
    }
}
